/**
 * 安全日志统计表
 * @author rxliuli
 */
class RSecureLog {
    /**
     * 构造函数
     * @param {Object} [option] 可选参数
     * @param {Integer} [option.id] id
     * @param {Integer} [option.totalCount] 所有事件总数
     * @param {Integer} [option.loginEventCount] 登录事件数量
     * @param {Integer} [option.logoutEventCount] 退出事件数量
     * @param {Integer} [option.overProviligeCount] 越权事件数量
     * @param {Integer} [option.pwdEventCount] 更改密码事件数量
     * @param {Integer} [option.statusEventCount] 更改状态事件数量
     * @param {Integer} [option.memberProxyCount] 会员代管事件数量
     * @param {Integer} [option.sessionChkCnt] 登录会话检查数量
     * @param {Integer} [option.resetPwdCnt] 重设密码请求数量
     * @param {Integer} [option.permGroupCount] 权限组数量
     * @param {String} [option.belongYear] 所属年，例如：2019
     * @param {...Object} [option.args] 其他参数
     */
    constructor({
                    id,
                    totalCount,
                    loginEventCount,
                    logoutEventCount,
                    overProviligeCount,
                    pwdEventCount,
                    statusEventCount,
                    memberProxyCount,
                    sessionChkCnt,
                    resetPwdCnt,
                    permGroupCount,
                    belongYear,
                    ...args
                } = {}) {
        this.id = id
        this.totalCount = totalCount
        this.loginEventCount = loginEventCount
        this.logoutEventCount = logoutEventCount
        this.overProviligeCount = overProviligeCount
        this.pwdEventCount = pwdEventCount
        this.statusEventCount = statusEventCount
        this.memberProxyCount = memberProxyCount
        this.sessionChkCnt = sessionChkCnt
        this.resetPwdCnt = resetPwdCnt
        this.permGroupCount = permGroupCount
        this.belongYear = belongYear
        Object.assign(this, args)
    }
}

/**
 * 安全日志统计表-日报
 * @author rxliuli
 */
class RSecureLogMon extends RSecureLog {
    /**
     * 构造函数
     * @param {Object} [option] 可选参数
     * @param {Number} [option.month] 统计日，例如：1
     * @param {...Object} [option.args] 其他参数
     */
    constructor({
                    month,
                    ...args
                } = {}) {
        super(args)
        this.month = month
        Object.assign(this, args)
    }
}

/**
 * 安全日志统计表-周报
 * @author rxliuli
 */
class RSecureLogWeek extends RSecureLog {
    /**
     * 构造函数
     * @param {Object} [option] 可选参数
     * @param {Number} option.week 统计周，一年52周，从第一周开始，例如：1
     * @param {...Object} [option.args] 其他参数
     */
    constructor({
                    week,
                    ...args
                } = {}) {
        super(args)
        this.week = week
        Object.assign(this, args)
    }
}

/**
 * 安全日志统计表-日报
 * @author rxliuli
 */
class RSecureLogDay extends RSecureLog {
    /**
     * 构造函数
     * @param {Object} [option] 可选参数
     * @param {Number} option.day 统计周，一年52周，从第一周开始，例如：1
     * @param {...Object} [option.args] 其他参数
     */
    constructor({
                    day,
                    belongMonth,
                    ...args
                } = {}) {
        super(args)
        this.day = day
        this.belongMonth = belongMonth
        Object.assign(this, args)
    }
}
